home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / prolog / brklyprl.lha / Emulator / Benchmarks / palin25.pl < prev    next >
Encoding:
Text File  |  1989-04-14  |  855 b   |  41 lines

  1.  
  2. /* Copyright (C) 1988, 1989 Herve' Touati, Aquarius Project, UC Berkeley */
  3.  
  4. %    serialize (palin25)
  5. %    from Warren's thesis
  6.  
  7. main :-
  8.     palin25(P),
  9.     serialize(P,X),
  10.     write(X),nl.
  11.  
  12. serialize(L,R) :-
  13.     pairlists(L,R,A),
  14.     arrange(A,T),
  15.     numbered(T,1,N).
  16.  
  17. pairlists([X|L], [Y|R], [pair(X,Y)|A]) :- pairlists(L,R,A).
  18. pairlists([], [], []).
  19.  
  20. arrange([X|L], tree(T1, X, T2)) :-
  21.     split(L, X, L1, L2),
  22.     arrange(L1, T1),
  23.     arrange(L2, T2).
  24. arrange([], void).
  25.  
  26. split([X|L], X, L1, L2) :- !, split(L, X, L1, L2).
  27. split([X|L], Y, [X|L1], L2) :- before(X,Y), !, split(L,Y,L1,L2).
  28. split([X|L], Y, L1, [X|L2]) :- before(Y,X), !, split(L,Y,L1,L2).
  29. split([], _, [], []).
  30.  
  31. before(pair(X1,Y1), pair(X2,Y2)) :- X1 < X2.
  32.  
  33. numbered(tree(T1, pair(X,N1), T2), N0, N) :-
  34.     numbered(T1, N0, N1),
  35.     N2 is N1 + 1,
  36.     numbered(T2,N2,N).
  37. numbered(_,N,N).
  38.  
  39. palin25("ABLE WAS I ERE I SAW ELBA").
  40.  
  41.